package com.ibo.ndemo;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.RemoteInput;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    public static final String RESULT_KEY = "remote_input";
    public static final int NOTIFICATION_ID = 777;
    public static final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建app图标快键方式
        addShortcut();
    }

    /**
     *  打开 shortcuts 页面
     */
    public void shortcuts(View v){
        Intent intent = new Intent(this, ShortCutActivity.class);
        startActivity(intent);
    }

    /**
     * 发送带有回复按钮的通知
     * @param view
     */
    public void click(View view) {
        final NotificationManager nm = getSystemService(NotificationManager.class);
        Notification notification = buildNotification();
        nm.notify(NOTIFICATION_ID, notification);
    }

    /**
     * 创建通知
     */
    private Notification buildNotification() {
        // step 1 创建RemoteInput
        RemoteInput remoteInput = new RemoteInput.Builder(RESULT_KEY)
                .setLabel("回复ibo的消息")
                .build();

        // step 2 创建pendingintent, 当发送时调用什么
        Intent intent = new Intent(this, SendMsgService.class);
        PendingIntent pi = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        // step 3 创建快捷回复 Action
        NotificationCompat.Action act = new NotificationCompat.Action.Builder(R.mipmap.ic_launcher, "ibo", pi)
                .addRemoteInput(remoteInput).build();

        // step 4 创建notification
        // 使用设置优先级的方式创建悬浮通知，则会自动消失
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("带有回复按钮的通知")
                .setContentText("这是带有回复按钮的通知，看可以直接回复，请您现在要回复吗？")
                .setColor(Color.CYAN)
                .setPriority(Notification.PRIORITY_MAX) // 设置优先级为Max，则为悬浮通知,PRIORITY_DEFAULT为默认
                .addAction(act) // 设置回复action
                .setAutoCancel(true)
                .setWhen(System.currentTimeMillis())
                .setDefaults(Notification.DEFAULT_ALL) // 想要悬浮出来， 这里必须要设置
                .setCategory(Notification.CATEGORY_MESSAGE);

        return builder.build();
    }

    private void addShortcut() {
        Intent addShortcutIntent = new Intent(ACTION_ADD_SHORTCUT);

        // 不允许重复创建
        addShortcutIntent.putExtra("duplicate", false);// 经测试不是根据快捷方式的名字判断重复的
        // 应该是根据快链的Intent来判断是否重复的,即Intent.EXTRA_SHORTCUT_INTENT字段的value
        // 但是名称不同时，虽然有的手机系统会显示Toast提示重复，仍然会建立快链
        // 屏幕上没有空间时会提示
        // 注意：重复创建的行为MIUI和三星手机上不太一样，小米上似乎不能重复创建快捷方式

        // 名字
        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));

        // 图标
        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                Intent.ShortcutIconResource.fromContext(MainActivity.this,
                        R.mipmap.user_1));

        // 设置关联程序
        Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
        launcherIntent.setClass(MainActivity.this, MainActivity.class);
        launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        addShortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, launcherIntent);

        // 发送广播
        sendBroadcast(addShortcutIntent);
    }
}



